/**
 * 
 */
 
/**
 * @author muddy
 *
 */
public class Lista_individuo {
	
	private Individuo lista;
	
	private Individuo best;
	
	private long populacao_actual;
	
	protected Lista_individuo()
	{
		lista=null;
		best=null;
		populacao_actual=0;
		return;
	}
	
	protected Individuo criar_individuo (int[][] matriz)
	{
		Individuo individuo= new Individuo(matriz);
		
		inserir_individuo(individuo);
		
		return individuo;
	}
	
	private void inserir_individuo(Individuo individuo)
	{
		if (lista==null)
		{
			lista=individuo;
			individuo.anterior=null;
			individuo.proximo=null;
		}		
		else
		{
			Individuo tmp=lista;
			
			while (individuo.ler_conforto()<tmp.ler_conforto())
			{
				tmp=tmp.proximo;
			}
			
			individuo.proximo=tmp;
			individuo.anterior=tmp.anterior;
			individuo.anterior.proximo=individuo;
			tmp.anterior=individuo;
		}
		
		if (individuo.ler_conforto()>best.ler_conforto())
		{
			best=individuo;
		}
		
		populacao_actual++;
	}
	
	protected void remover_individuo (Individuo individuo)
	{
		if(individuo.anterior==null)
		{
			if(individuo.proximo!=null)
			{
				individuo.proximo.anterior=null;
			}
			lista=individuo.proximo;
			
			individuo.proximo=null;
		}
		else
		{
			if(individuo.proximo!=null)
			{
				individuo.proximo.anterior=null;
			}
			individuo.anterior.proximo=individuo.proximo;
			
			individuo.proximo.anterior=individuo.anterior;
			
			individuo.anterior=individuo.proximo=null;
		}
		
		populacao_actual--;
		
		Cap_elemento tmp= individuo.eventos;
		//Cap_elemento tmp2;
		
		while(tmp!=null)
		{
			//tmp2=tmp;
			//tmp=(evento)tmp.;
		}
	}
	
	protected long ler_populacao_actual()
	{
		return populacao_actual;
	}
	
	protected void epidemia()
	{
		Individuo tmp;
		
		tmp=this.lista;
		
		for (int i=0; i<5; i++)
		{
			tmp=tmp.proximo;
		}
	}
	
}
